// 我们不是跟踪链表中的一个值，而是跟踪两个值，称为快跑者和慢跑者
// 如果 n 是一个快乐数，即没有循环，那么快跑者最终会比慢跑者先到达数字 1
// 如果 n 不是一个快乐数，那么最终快跑者和慢跑者将在同一个数字相遇


function getNext (n) {
  let totalSum = 0;
  while (n > 0) {
    let d = n % 10;
    n = Math.floor(n / 10);
    totalSum += d * d;
  }
  return totalSum;
}

var isHappy = function (n) {
  let slow = n,
      fast = getNext(n);
  while (fast != 1 && slow != fast) {
    slow = getNext(slow);
    fast = getNext(getNext(fast));
  }
  return fast == 1;
} 